# 地址和行政区域相关模型
from datetime import datetime
from app.extensions import db
from .base import BaseModel, get_db


class Address(BaseModel):
    """地址模型"""
    __tablename__ = 'address'
    
    # 关联信息
    customer_id = get_db().Column(get_db().Integer, get_db().ForeignKey('customer.id'), nullable=False)  # 关联客户ID
    address_type = get_db().Column(get_db().String(20), default='办公地址')  # 地址类型：办公地址、注册地址、发货地址等
    
    # 行政区域信息
    province_id = get_db().Column(get_db().Integer, get_db().ForeignKey('regions.id'))  # 省份ID
    city_id = get_db().Column(get_db().Integer, get_db().ForeignKey('regions.id'))  # 城市ID
    district_id = get_db().Column(get_db().Integer, get_db().ForeignKey('regions.id'))  # 区县ID
    
    # 详细地址信息
    street_address = get_db().Column(get_db().String(255))  # 街道地址
    postal_code = get_db().Column(get_db().String(10))  # 邮政编码
    is_default = get_db().Column(get_db().Boolean, default=False)  # 是否为默认地址
    
    # 关联关系 - 移除customer关系，因为在Customer模型中已经定义了backref
    # customer = relationship('Customer', foreign_keys=[customer_id])
    province = get_db().relationship('Region', foreign_keys=[province_id])
    city = get_db().relationship('Region', foreign_keys=[city_id])
    district = get_db().relationship('Region', foreign_keys=[district_id])


class Region(BaseModel):
    """行政区域模型"""
    __tablename__ = 'regions'
    
    # 基本信息
    name = get_db().Column(get_db().String(50), nullable=False)  # 区域名称
    code = get_db().Column(get_db().String(20), unique=True, nullable=False)  # 行政区划代码
    level = get_db().Column(get_db().String(10), nullable=False)  # 级别：省、市、区县
    parent_id = get_db().Column(get_db().Integer, get_db().ForeignKey('regions.id'))  # 父级区域ID
    
    # 关联关系
    parent = get_db().relationship('Region', remote_side='Region.id', backref='children', foreign_keys=[parent_id])
    # 作为省份的地址
    province_addresses = get_db().relationship('Address', foreign_keys=[Address.province_id], overlaps="province")
    # 作为城市的地址
    city_addresses = get_db().relationship('Address', foreign_keys=[Address.city_id], overlaps="city")
    # 作为区县的地址
    district_addresses = get_db().relationship('Address', foreign_keys=[Address.district_id], overlaps="district")